import Boss from './Boss.js'

// 简单Boss实现类
export default class SimpleBoss extends Boss {
  constructor() {
    // 参数：宽度、高度、速度、生命值、分数、类型、图像路径
    super(100, 100, 2, 1000, 5000, 'simple', 'images/boss1.png')

    // 设置Boss名称
    this.name = '雷霆将军'

    // 自定义属性
    this.bulletCooldown = 1000 // 子弹冷却时间（毫秒）
    this.lastBulletTime = 0
  }

  // 重写update方法，添加发射子弹的逻辑
  update(timestamp) {
    // 调用父类的update方法
    super.update(timestamp)

    // 如果还在入场，不发射子弹
    if (this.isEntering) {
      return
    }

    // 发射子弹
    if (timestamp - this.lastBulletTime > this.bulletCooldown) {
      this.lastBulletTime = timestamp
      return this.fireBullets()
    }
  }

  // 发射子弹
  fireBullets() {
    // 根据当前阶段返回不同的子弹模式
    const bullets = []

    switch (this.currentPhase) {
      case 1:
        // 第一阶段：直线发射3颗子弹
        bullets.push(
          {
            x: this.x + this.width / 2 - 20,
            y: this.y + this.height,
            speedX: 0,
            speedY: 5,
          },
          {
            x: this.x + this.width / 2,
            y: this.y + this.height,
            speedX: 0,
            speedY: 5,
          },
          {
            x: this.x + this.width / 2 + 20,
            y: this.y + this.height,
            speedX: 0,
            speedY: 5,
          }
        )
        break
      case 2:
        // 第二阶段：扇形发射5颗子弹
        for (let i = -2; i <= 2; i++) {
          bullets.push({
            x: this.x + this.width / 2,
            y: this.y + this.height,
            speedX: i * 2,
            speedY: 5,
          })
        }
        break
      case 3:
        // 第三阶段：环形发射8颗子弹
        for (let i = 0; i < 8; i++) {
          const angle = (i / 8) * Math.PI * 2
          bullets.push({
            x: this.x + this.width / 2,
            y: this.y + this.height / 2,
            speedX: Math.sin(angle) * 5,
            speedY: Math.cos(angle) * 5,
          })
        }
        break
      case 4:
        // 第四阶段：混合模式，发射多组子弹
        // 直线子弹
        bullets.push({
          x: this.x + this.width / 2,
          y: this.y + this.height,
          speedX: 0,
          speedY: 6,
        })

        // 扇形子弹
        for (let i = -1; i <= 1; i += 0.5) {
          bullets.push({
            x: this.x + this.width / 2,
            y: this.y + this.height,
            speedX: i * 3,
            speedY: 5,
          })
        }
        break
    }

    return bullets
  }

  // 重写阶段转换方法
  onPhaseTransition(newPhase) {
    // 调用父类的方法
    super.onPhaseTransition(newPhase)

    // 根据新阶段调整子弹冷却时间
    switch (newPhase) {
      case 2:
        this.bulletCooldown = 800 // 第二阶段：加快射速
        break
      case 3:
        this.bulletCooldown = 1200 // 第三阶段：环形攻击，射速略慢
        break
      case 4:
        this.bulletCooldown = 500 // 第四阶段：最快射速
        break
    }
  }
}
